【C++】迭代器为什么会失效?它的底层原理是什么?什么情况下erase最后一个元素会出现段错误? |
您所在的位置:网站首页 › stl 迭代器 原理 › 【C++】迭代器为什么会失效?它的底层原理是什么?什么情况下erase最后一个元素会出现段错误? |
什么是迭代器失效?有哪些情况会导致迭代器失效?避免C++迭代器失效的开发建议避免C++迭代器故障问题:使用建议:
什么是迭代器失效?
迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。 迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器,程序可能会崩溃)。 出错原因:比如:resize、reserve、insert、assign、push_back以上操作,都有可能会导致vector扩容,也就是说vector底层原理旧空间被释放掉,而在打印时,it还使用的是释放之间的旧空间,在对it迭代器操作时,实际操作的是一块已经被释放的空间,而引起代码运行时崩溃。 解决方式:在以上操作完成之后,如果想要继续通过迭代器操作vector中的元素,只需给it重新赋值即可。 错误使用: int main() { vector arr{ 1,2,3,4 }; auto it = arr.begin(); arr.insert(it, 10);//第一次可以正常的插入 arr.insert(it, 20);//第二次由于扩容原因会导致无法插入 for (auto a : arr) { cout |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |